Git 使用实战

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。
作为一个标准的程序猿,Git的使用是必须掌握的。为什么呢?高端大气上档次装B必备技能,哈哈~

这里就记录一下自己在使用Git的过程中遇到的问题以及总结,如有不对处还请指正,谢谢。

安装 Git

Linux 上安装Git

Linux 各版本通用的源码安装:
先从官网下载源码然后解压,依次执行./config, make , sudo make install 即可

1
2
3
4
5
6
7
8
9
cd /opt
mkdir software
cd software
wget https://www.kernel.org/pub/software/scm/git/git-2.10.5.tar.gz
tar -zxvf git-2.10.5.tar.gz
cd git-2.10.5
./config
make
sudo make install

安装过程中请耐心等待,安装成功后在命令行输入 git –version 显示出版本号那么恭喜你,安装成功!

Mac 上安装Git(本文的环境)

采用Homebrew 的方式安装,如果你的机器上没安装 Homebrew 建议先安装 Homebrew,然后根据其文档进行安装 Git 即可

Windows 上安装Git

在 Windows 上安装使用 Git, 是不是首先就想到了 exe 文件呢,哈哈~ Windows 忠实粉。
我们到Git官网上去下载 Git安装包, 然后默认安装一路到底就行,安装成功后找到 Git Bash 点击打开会弹出 Git命令窗口,恭喜你,安装成功了!
安装成功后还需要配置一下Git环境,在弹出的命令行中输入:

1
2
git config --global user.name "Your Name"
git config --global user.email "Your Email"

注意 git config 命令的 –global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

常用命令

  • git init
    初始化本地工作目录,git init blog
  • git clone 从远程的版本库克隆到本地,git clone git://github.com/jquery/jquery.git
  • git status 查看仓库状态
  • git remote 访问远程服务器上创建一个目录

    • git remote -v 查看远程仓库
    • git remote add [name] [url] 添加远程仓库
    • git remote rm [name] 删除远程仓库
    • git remote set-url –push [name] [newUrl] 修改远程仓库
    • git pull [remoteName] [localBranchName] 拉取远程仓库到本地分支
    • git push [remoteName] [localBranchName] 将本地分支代码推送到远程仓库
  • git add 将修改添加到暂存区

    • git add . 添加所有的修改
    • git add filename 添加指定文件的修改
    • git add *.json 添加所有 json 文件
    • git add book* 添加所有 book 开头的文件
  • git commit -m “comment” 将暂存区的代码提交到仓库,comment 可作注释
  • git pull 拉取远程仓库
  • git push 推送代码到仓库
  • git branch 分支
    • git branch 查看本地所有分支
    • git branch -r 查看远程分支
    • git branch [newBranchName] 创建本地新分支
    • git checkout [branchName] 切换到一个存在的分支
    • git checkout -b [newBranchName] 创建新分支,并切换到新分支
    • git branch -d [branchName] 删除指定分支(已和产生该分支的主分支合并)
    • git branch -D [branchName] 强制删除指定分支,无论是否合并
    • git push origin [branchName] 创建远程分支(本地分支push到远程)
  • git checkout
    • git checkout . 丢弃工作区所有的修改退回到原始状态,不包括添加到暂存区的修改
    • git checkout filename 丢弃指定文件的修改回到原始状态
    • git checkout branchName 切换到指定分支
  • git reset 版本回退
    • git reset HEAD filename 丢弃指定文件添加到暂存区的修改
    • git reset –hard HEAD^
    • git reset –hard HEAD^^
    • git reset –hard HEAD~100
    • git reset –hard 321456
  • git log 查看 git 的 commit 信息,包括注释在内
  • git diff 在文件修改了未提交之前查看修改的部分
  • git merge branchName 合并指定分支到当前分支
  • git stash 将当前工作区的修改暂存起来,就像堆栈一样,可以随时将某一次缓存的修改再重新应用到当前工作区

    • git stash 暂存当前修改内容到堆栈
    • git stash list 查看当前暂存堆栈列表
    • git stash apply@{x} 应用任意一次修改到当前工作区,其修改内容还继续保留在暂存列表,并未丢弃
    • git stash pop 弹出最近的暂存,弹出后列表里将不再有了,如果当前工作区不干净,弹出时有冲突,则暂存列表会继续保留修改
    • git stash save [comment] 保存时打标记,使得你用git stash list的时候显示这些标记,方便你回忆是修改的什么
    • git stash drop stash@{x} 丢弃某次修改
  • .gitignore 提交时忽略的文件配置

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,这个时候就需要用到此文件了。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。例如:

    1
    2
    3
    4
    5
    6
    7
    .DS_Store
    Thumbs.db
    db.json
    *.log
    node_modules/
    public/
    .deploy*/

分支管理(项目管理)

当我们创建一个项目的代码仓库的时候,会默认创建一个主分支 master 分支,但实际应用中,对于一般的线上项目而言,我们基本上都会按照项目环境进行创建相应的分支,比如:
| 环境 | 分支 |
| - | -: |
| 开发环境 | development |
| 测试环境 | test |
| 预发布环境 | stage |
| 生产环境 | online |
当我们需要进行协同开发的时候,从远程仓库将代码克隆到本地,然后创建属于自己的develop 分支,待完成编码之后将代码 merge 到 test 分支提交到远程仓库供测试人员进行初步测试,初步测试通过之后发布之前将代码合并到stage 分支进行预发布测试,再次测试通过之后,将代码 merge 到 online 分支发布上线。具体的各分支以及开发人员之间的协同与配合,请自行查阅。

代码托管平台

GitHub



GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。其使用的基于Web的代码托管服务,是目前全球最大的开源社交编程及代码托管网站。

我一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的。其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目。

注册

打开Github 官网,填写资料点击 Sign up for Github
github sign in

创建代码仓库

注册成功之后,登录点击头像按钮选择 Your profile -> Repostories -> New 创建一个代码仓库;
Create new Github repo

SSH 配置

本地装好 git 之后,需要我们生成 SSH key 和我们的 github 账户进行关联,执行 ssh-keygen -t rsa -C “email@foxmaol.com“ 然后一路到底即可,就会在你的.ssh 文件夹下生成两个文件 id_rsa 和 id_rsa.pub,分别为私钥和公钥。

回到github网站上来点击 头像 -> Settings -> SSH and GPG keys -> New SSH key,其中 title 可以自定义填写,将刚才生成的公钥里的内容全部复制下来粘贴到 Key 的输入框中点击下方 Add SSH key 即可
add ssh key
然后就可以通过 SSH 的方式 clone你自己github上的仓库了

Bitbucket



BitBucket 是一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户。

特点:
  • 无限制的私有仓库个数
  • 无限制的磁盘空间
  • 同时支持https/ssh
  • Bug 跟踪
  • 项目Wiki
  • API 支持
  • 灵活的权限控制
  • 可自定义域名
  • RSS 修改记录输出
  • 自定义下载

对于个人来说最重要的就是无限制的私有仓库个数啦,有一些不希望别人看到源码的项目就可以托管到这里来,使用和 Github 一样的。 Bitbucket 官网

Coding



Coding 是一个面向开发者的云端开发平台,目前提供代码托管,运行空间,质量控制,项目管理等功能。此外,还提供社会化协作功能,包含了社交元素,方便开发者进行技术讨论和协作, 是目前国内体验最接近 github 的产品。

也可以创建私有项目,还提供了webIDE,所有的工作可全部在云端完成。

Coding,让开发更简单!
Coding 官网

码云



关于码云的使用,推荐到廖雪峰老师的博客使用码云-廖雪峰看一下,其写的很详细了,在这里谢谢廖雪峰老师。 码云官网

GitLab



gitlab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。
GitLab 官网

关于这几个托管平台的比较,请参考GitHub & Bitbucket & GitLab & Coding 的对比分析-FIR-im官方

多平台同时使用

如何进行多个代码托管平台在一台电脑上同时使用呢?我们知道本地电脑与平台之间的通信校验是通过 ssh 配置进行的,那么我们就要来配置我们的 ssh了。

在上边我们已经介绍过如何生成 ssh key 以及如何添加到我们的平台账户里。
做到多平台同时使用首先我们要为每个平台生成一个 key(如果注册邮箱一样可以使用同一套公钥私钥)并将公钥添加到平台的 SSH 配置中, 接下来就是编写我们的.ssh/config,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Host github.com
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_git

Host bitbucket.org
User git
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_bit

Host coding.net
User git
HostName coding.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_coding

编写完进行保存,这样我们就可以通过 SSH 的方式克隆各平台的仓库并提交我们的代码了,具体的各参数的意义请参考 如何使用特定的SSH Key提交GIT

推荐工具

Git Windows 客户端

SourceTree

借鉴

搭建 Git 服务器-廖雪峰
如何使用特定的SSH Key提交GIT
通过SSH 密钥连接GitHub/Bitbucket
GitHub & Bitbucket & GitLab & Coding 的对比分析–FIRim官方